home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Belgian Amiga Club - ADF Collection
/
BS1 part 34.zip
/
BS1 part 34
/
GFA basic training.adf
/
Erweiterung
/
DISK_MONITOR.LST
< prev
next >
Wrap
File List
|
1989-06-01
|
4KB
|
159 lines
' Diskzugriff mit trackdisk.device auf einzelne Sektoren
' Minidiskmonitor für GFA-Basic Programmierung
' Thomas Knab am 4.3.1989
'
INPUT "Mit welchem Laufwerk arbeiten ? DF",lw%
'
@init
DO
@menu
EXIT IF sektornummer&=-1
@sector_lesen
@ausgeben
LOOP
@zumachen
EDIT
'
'
PROCEDURE init
' In das Array fehler$() werden die Klartexte der Fehlermeldungen
' eingelesen
DIM fehler$(15)
FOR i|=0 TO 15
READ fehler$(i|)
NEXT i|
' Hier beginnen wir die Strukturen einzurichten
' Erst den Speicher für IO_Request Struktur reservieren :
ioadr%=MALLOC(80,&H10002)
IF ioadr%=0
PRINT "Kein Speicher für DISKIO!!"
END
ENDIF
' Der Speicher für die Informationsübergabe:
readreply%=MALLOC(32,&H10002)
IF readreply%=0
PRINT "Kein Speicher für Reply Struktur !!!"
~MFREE(ioadr%,80)
END
ENDIF
' Nun noch den Speicher für unseren eigenen Diskbuffer
' für einen Sektor (512 Bytes)
sektorbuffer%=MALLOC(512,&H10002)
IF sektorbuffer%=0
PRINT "Kein Speicher für Buffer !!!"
~MFREE(ioadr%,80)
~MFREE(readreply%,32)
END
ENDIF
' Struktur Initialisieren
SUB task%,task%
taskadr%=FindTask(task%)
LONG{readreply%+&H10}=taskadr%
~AddPort(readreply%)
'
' Disk Device öffnen
devname$="trackdisk.device"+CHR$(0)
devname%=VARPTR(devname$)
' Laufwerk lw%, keine Flags
ok%=OpenDevice(devname%,lw%,ioadr%,0)
' Nur ein Fehlertest, ob alles gelungen ist.
IF ok%<>0
PRINT "Trackdisk Device konnte nicht geöffnet werden !!"
PRINT " LAUFWERK EXISTIERT NICHT"
~RemPort(readreply%) ! Port wieder freigeben
~MFREE(ioadr%,80) ! Den Speicher wieder freigeben
~MFREE(readreply%,32)
~MFREE(sektorbuffer%,512)
END
ENDIF
RETURN
PROCEDURE menu
CLS
PRINT " Erlaubte Disksektornummern sind: 0 bis 1759"
PRINT " Direktory ist auf Sektor 880"
PRINT " Bootblock (Virus?) ist Sektor 0 und 1"
PRINT
PRINT " Fortsetzung und Ende der Ausgabe durch Maustaste"
PRINT
PRINT " Programmende NUR durch '-1' !! um Strukturen zu schließen"
PRINT
INPUT " Welchen Sektor lesen";sektornummer&
RETURN
PROCEDURE sector_lesen
' IO-Struktur mit Werten versorgen
' Die Adresse der ReadReply-Routine übergeben
LONG{ioadr%+14}=readreply%
' Commando: lesen (=2) übergeben
DPOKE ioadr%+28,2
' Die Adresse des Floppybuffers für die Daten:
LONG{ioadr%+40}=sektorbuffer%
' Wieviel Bytes sollen gelsen werden (ein Sektor) ?:
LONG{ioadr%+36}=512
' Welchen Sektor der Disk lesen (in Bytes):
sektorposition%=512*sektornummer&
LONG{ioadr%+44}=sektorposition%
' ... und das Lesen beginnen
ok2%=DoIO(ioadr%)
' Trackdiskfehler aufgetreten ?
IF ok2%<>0
fehler&=PEEK(ioadr%+31)
PRINT " DISK-Error : #";fehler&-220;" aufgetreten !!"
PRINT " Typ :";fehler$(fehler&-240)
@zumachen
END
ENDIF
'
' Motor aus (9 = TD_MOTOR)
DPOKE (ioadr%+28),9
' Bytelänge 0
LONG{ioadr%+36}=0
~DoIO(ioadr%)
RETURN
PROCEDURE ausgeben
CLS
FOR j|=0 TO 31
FOR i|=0 TO 15
aus%=PEEK(sektorbuffer%+i|+j|*16)
PRINT AT(i|*3+5,j|+2);"00";
PRINT AT(i|*3+5,j|+2);HEX$(aus%);
IF aus%<20
PRINT AT(i|+60,j|+2);"."; ! Keine Darstellungsmöglichkeit für ASCII-Zeichen kleiner 20
ELSE
PRINT AT(i|+60,j|+2);CHR$(aus%);
ENDIF
NEXT i|
PRINT
IF j|=15
REPEAT
UNTIL MOUSEK
ENDIF
NEXT j|
REPEAT
UNTIL MOUSEK
RETURN
PROCEDURE zumachen
~RemPort(readreply%)
~CloseDevice(ioadr%)
~MFREE(ioadr%,80)
~MFREE(readreply%,32)
~MFREE(sektorbuffer%,512)
RETURN
PROCEDURE fehlermeldungen
DATA "Unbekannter Fehler"
DATA "Sektor Header fehlt"
DATA "Ungültige Sektor Preamble"
DATA "Ungültige Sektor-ID"
DATA "Falsche Header Checksum"
DATA "Falsche Sektor Checksum"
DATA "Zuwenig Sektoren"
DATA "Ungültiger Sektor Header"
DATA "Disk Schreibeschützt"
DATA "Disk ist gewechselt worden"
DATA "Track nicht gefunden"
DATA "nicht genug Speicher"
DATA "ungültige Sektornummer"
DATA "ungültiges Laufwerk"
DATA "Laufwerk schon aktiv"
DATA "Reset-Phase"
RETURN